#ifndef LABELEDVALUEBOX_H
#define LABELEDVALUEBOX_H

#include <QWidget>
#include <QHBoxLayout>

class QLabel;

/// <summary>
/// 标签值框，用于显示 标签: 数值 的布局
/// </summary>
class LabeledValueBox : public QWidget
{
    Q_OBJECT
    Q_PROPERTY(QString value READ value WRITE setValue NOTIFY valueChanged)
  public:
    /// <summary>
    /// 构造函数
    /// </summary>
    /// <param name="title">标题文本，用于显示在标题标签上</param>
    /// <param name="parent"></param>
    explicit LabeledValueBox(const QString &title, QWidget *parent = nullptr);
    ~LabeledValueBox() override;
    // 获取当前显示值
    QString value() const;
    // 获取当前标签文本
    QString title() const;

    // 设置标签部分的样式, QSS格式
    void setLabelStyle(const QString &styleSheet);
    // 设置值部分的样式, QSS格式
    void setValueStyle(const QString &styleSheet);
    // 设置整个控件盒子的样式, QSS格式
    void setBoxStyle(const QString &styleSheet);
    // 设置全部样式, QSS格式
    void setStyles(const QString &labelStyle, const QString &valueStyle, const QString &boxStyle = "");

    // 布局设置方法

    // 设置标签与值之间的间距
    void setSpacing(int spacing);
    // 设置标签宽度
    void setLabelWidth(int width);
    //  设置标签文本的对齐方式
    void setLabelAlignment(Qt::Alignment alignment);
    // 设置值文本的对齐方式
    void setValueAlignment(Qt::Alignment alignment);

    // 便捷方法

    // 设置标签文本的字体大小
    void setLabelFontSize(int size);
    // 设置值文本的字体大小
    void setValueFontSize(int size);
    // 设置标签文本的颜色
    void setLabelColor(const QString &color);
    // 设置值文本的颜色
    void setValueColor(const QString &color);

  public Q_SLOTS:
    void setValue(const QString &value);
    void setValue(int value);
    void setValue(double value, int precision = 2);  // 默认保留两位小数
    void setValue(float value, int precision = 2);   // 默认保留两位小数

  Q_SIGNALS:

    // 值发生变化时发出的信号
    void valueChanged(const QString &value);

  private:
    void setupDefaultStyles();  // 设置默认样式

    QString m_title;        // 标题文本
    QLabel *m_titleLabel;   // 标题标签控件
    QLabel *m_valueLabel;   // 值标签控件
    QHBoxLayout *m_layout;  // 水平布局管理器

    QString m_defaultLabelStyle;  // 标签样式
    QString m_defaultValueStyle;  // 数值样式
    QString m_defaultBoxStyle;    // 盒子样式
};

#endif  // LABELEDVALUEBOX_H